package com.kizuki.jdbc;

import org.junit.Test;

import java.sql.*;

public class TestJdbc1 {

    public static void main(String[] args) throws ClassNotFoundException {
        Class.forName("com.mysql.jdbc.Driver");
        String sql = "insert into hero values(null,?,0,1)";

        try ( // try-with-resources
            Connection c = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8","root","admin");
            Statement s = c.createStatement();
            PreparedStatement ps1 = c.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS) // Statement.RETURN_GENERATED_KEYS获取自动增加的id号
        ){

            //------------------------------------------ Statement ------------------------------------------
            // execute与executeUpdate的相同点：都可以执行增加，删除，修改
            // 不同1：execute可以执行查询语句, 然后通过getResultSet，把结果集取出来
            String sqlSelect = "select * from hero";
            s.execute(sqlSelect);

            //executeUpdate不能执行查询语句  增删改
            //s.executeUpdate(sqlSelect); // Can not issue SELECT via executeUpdate()

            ResultSet rs = s.getResultSet();
            while (rs.next()) {
                System.out.println(rs.getInt("id"));
            }

            // 不同2:
            // execute返回boolean类型，true表示执行的是查询语句，false表示执行的是insert,delete,update等等
            boolean isSelect = s.execute(sqlSelect);
            System.out.println(isSelect);

            // executeUpdate返回的是int，表示有多少条数据受到了影响
            String sqlUpdate = "update Hero set name = '提莫' where id < 100";
            int number = s.executeUpdate(sqlUpdate);
            System.out.println(number);

            //------------------------------------------ PreparedStatement ------------------------------------------
            ps1.setString(1, "盖伦");
            // 执行插入语句
            ps1.execute();

            // 在执行完插入语句后，MySQL会为新插入的数据分配一个自增长id
            // JDBC通过getGeneratedKeys获取该id
            ResultSet rs1 = ps1.getGeneratedKeys();
            if (rs1.next()) {
                int id = rs1.getInt(1);
                System.out.println(id);
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }

    }

    @Test
    public void printMysqlInfo() throws ClassNotFoundException {
        Class.forName("com.mysql.jdbc.Driver");
        try(
                Connection c = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8","root","admin"))
        {
            DatabaseMetaData dbmd = c.getMetaData();
            // 获取数据库服务器产品名称
            System.out.println("数据库产品名称:\t"+dbmd.getDatabaseProductName());
            // 获取数据库服务器产品版本号
            System.out.println("数据库产品版本:\t"+dbmd.getDatabaseProductVersion());
            // 获取数据库服务器用作类别和表名之间的分隔符 如test.user
            System.out.println("数据库和表分隔符:\t"+dbmd.getCatalogSeparator());
            // 获取驱动版本
            System.out.println("驱动版本:\t"+dbmd.getDriverVersion());

            System.out.println("可用的数据库列表：");
            ResultSet rs2 = dbmd.getCatalogs();
            while (rs2.next()) {
                System.out.println("数据库名称:\t"+rs2.getString(1));
            }

        } catch (SQLException e) {
            e.printStackTrace();
        } finally {

        }
    }

}
